package com.jt.factory;

import org.springframework.beans.factory.FactoryBean;
import org.springframework.stereotype.Component;

import java.util.Calendar;

/**
 * FactoryBean是Spring提供的接口,spring自动完成调用.获取指定的对象
 * 难点讲解:
 *      1.@Component 标识类 则将该类交给Spring容器管理.
 *      2.Spring中FactoryBean的讲解
 *          如果spring加载的时候遇到FactoryBean接口
 *          则会自动的执行重写的方法getObject/getObjectType
 *      3.工厂模式说明:
 *          Map<Key:calendar,value=Calendar对象></>
 *
 *      核心功能:
 *              1. key: 就是当前类型(如果自己编辑注解以注解为准)
 *              2. value: 调用getObject获取的返回值对象
 *              将上述的数据,交给Spring容器管理
 *      该功能什么时候使用:
 *              1. 某些对象不能直接实例化的.
 *              2. 整合其它第三方框架对象时 经常使用.
 */
@Component("calendar")
public class CalendarFactory implements FactoryBean<Calendar> {

    //现阶段 大家理解为主. 未来写结构设计的时候,作用很大!!!!!
    //动态执行该方法,获取返回值对象
    @Override
    public Calendar getObject() throws Exception {
        //利用calendar的工具API 实现对象的创建
        return Calendar.getInstance();
    }

    @Override
    public Class<?> getObjectType() {
        //固定写法. 一般直接xxx.class即可
        return Calendar.class;
    }
}
